/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package ModuloDiagnosticador;

import ModuloBaseDelConocimiento.Caso;
import ModuloBaseDelConocimiento.Enfermedad;

/**
 *
 * @author rayner
 */
public class NeuronaLVQ {
    private int id;
    private double pesos[];
    private Enfermedad enfermedad;
    private boolean zeros;
    private String descripcion;
    public NeuronaLVQ(int ident, double weights[], Enfermedad tipo){
        pesos = weights;
        id = ident;
        enfermedad = tipo;
        zeros = false;
    }
    public NeuronaLVQ(int iden, int tamano, Enfermedad tipo){
        pesos = new double[tamano];
        id = iden;
        enfermedad = tipo;
        zeros = true;
    }
    public double calcularDistEuclidiana(double[] input){
        double dist = 0.0;
        for(int i = 0; i < input.length ; i ++){
            dist += (input[i] - pesos[i]) * (input[i] - pesos[i]);
        }
        return Math.sqrt(dist);
    }
    public boolean isSameClass(int target){
        if (target == enfermedad.getId()) return true;
        return false;
    }
    public void updatePesos(boolean acercar_alejar, double aprendizaje, double input[], String desp){
        int multiplicador = 1;
        if(acercar_alejar == false){
            multiplicador = -1;
        }
        for(int i = 0; i < pesos.length; i++){
            pesos[i] = pesos[i] + multiplicador *aprendizaje * (input[i] - pesos[i]);
        }
        zeros = false;
       if(acercar_alejar) descripcion = desp;
    }
    public boolean getAreZeros(){
         return zeros;
    }
    public Caso getCaso(){
        Caso cas = new Caso();
        cas.setDescripcion(descripcion);
        cas.setEnfermedad(enfermedad);
        return cas;
    }
}
